package com.luoke.manage.threadmanage;

import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;

/**
 * CompletableFuture管理类，用于管理所有的CompletableFuture
 */
public class FutureManager {

    /**
     * ConcurrentHashMap是线程安全的集合，效率比HashTable高
     * CompletableFuture帮助完成异步任务，它可以等待另一个异步任务完成后执行
     */
    private static final ConcurrentHashMap<String, CompletableFuture<Object>> futureMap = new ConcurrentHashMap<>();


    /**
     *  注册 CompletableFuture
     * @param userId 用于保存当前用户注册的future id
     * @param future 用于保存当前用户注册的future
     */
    public static void registerFuture(String userId, CompletableFuture<Object> future) {
        futureMap.put(userId, future);
    }



    /**
     * 获取指定用户的future
     * @param userName 根据用户名进行获取
     * @return 返回Future对象
     */
    public static CompletableFuture<Object> getFuture(String userName) {
        return futureMap.get(userName);
    }



    /**
     * 完成 CompletableFuture，并从 Map 中移除
     * @param userId id
     * @param result 完成的结果，这个结果可以提供给回调方法使用
     */
    public static void completeFuture(String userId,Object result) {
        CompletableFuture<Object> future = futureMap.remove(userId);
        if (future != null) {
            future.complete(result);
        }
    }
}
